'''
第七周作业：网络爬虫基础-猫眼电影top100数据抓取
时间：20180910
抓取地址：http://maoyan.com/board/4
字段需求：序号、图片、电影名称、主演、时间、评分

https://blog.csdn.net/yaoyefengchen/article/details/79025943
'''

# 导入模块
import requests
import re
import os
import json

def getMaoyanMovie(offset):
	# 定义url地址
	_url = 'http://maoyan.com/board/4?offset='+str(offset)

	# 定义header头信息
	_headers = {
		'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
		'Accept-Encoding':'deflate',
		'Accept-Language':'zh-CN,zh;q=0.9',
		'Connection':'keep-alive',
		'Host':'maoyan.com',
		'Upgrade-Insecure-Requests':'1',
		'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
	}

	# 发送请求信息
	req = requests.get(_url,headers=_headers)
	html = req.content.decode('utf-8')

	# 获取排名序号
	rank_pat = 'class="board-index.*>(\d+)</i>'
	rank_list = re.findall(rank_pat,html)

	# 正则表达式进行解析
	pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name">'+'<a.*?>(.*?)</a>.*?"star">(.*?)</p>.*?releasetime">(.*?)</p>'+'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)
	# 匹配所有符合条件的内容
	items = re.findall(pattern, html)

	# 定义存放结果列表
	data = []
	move_dict = {}

	# 定义临时存放图片信息列表，以便于下载图片使用
	piclist = []
	for item in items:
		piclist.append(item[1])
		move_dict = {
			'index': item[0],
			'image': item[1],
			'title': item[2],
			'actor': item[3].strip()[3:],
			'time': item[4].strip()[5:],
			'score': item[5] + item[6]
		}
		# 将单个的影片字典信息压入到列表中
		data.append(move_dict)

	# 定义图片存放路径
	img_path = './maoyan_img_'+str(offset)+'/'
	
	# 判断当前目录是否存在,如果存在获取图片路径否则创建目录
	if os.path.exists(img_path):
		# 	获取指定文件夹中的所有文件和文件夹组成的列表
		thumb = os.listdir(img_path)
		for y in thumb:
			os.remove(img_path+y)
	else:
		os.mkdir(img_path)

	x = 0
	for pic in piclist:
		# print('开始下载第'+str(x+1)+'张图片')
		pres = requests.get(pic)
		# 以二进制写入的方式打开文件
		_file = open(img_path+str(x+1)+'.jpg','wb')
		# 写入文件
		_file.write(pres.content)
		# 关闭文件
		_file.close()

		move_dict['image'] = img_path+str(x+1)+'.jpg'
		print('第'+str(x+1)+'张图片下载完成...')
		x+=1
	

	# 定义文本路径
	list_txt_path = './maoyan_txt_'+str(offset)+'/'
	thumb = []
	
	if os.path.exists(list_txt_path):
		# 	获取指定文件夹中的所有文件和文件夹组成的列表
		thumb = os.listdir(list_txt_path)
		for y in thumb:
			os.remove(list_txt_path+y)
	else:
		os.mkdir(list_txt_path)

	# 将结果写入到文本中
	txt = open(list_txt_path+'movie.txt','w',encoding="utf-8")
	for msg in data:
		txt.write(json.dumps(msg, ensure_ascii=False) + '\n')
	txt.close
	print('文本写入成功')


if __name__ == '__main__':
	for i in range(10):
		getMaoyanMovie(i * 10)


